package package05章_数组.Array2;

/**
 * ClassName: e_5_5twoArray03
 * Package: package05章_数组.Array2
 * Description:二维数组的基本使用（难点）
 *
 * @Author lys
 * @Create 2023/12/17 20:03
 * @Version 1.0
 */
public class d_5_5twoArray03 {
    public static void main(String[] args) {
        //1. 数组的声明与初始化
        //复习
        int[] arr1_1 = new int[]{1,2,3};
        //方式1：静态初始化:数组变量的赋值和数组元素的赋值同时进行
        int[][] arr2_1 = new int[][]{{1,2,3},{4,5},{6,7,8,9}};

        //方式2：动态初始化1:数组变量的赋值和数组元素的赋值分开进行
        String[][] arr3_1 = new String[3][4];
        //方式2：动态初始化2
        double[][] arr4_1 = new double[2][];

        //其它正确的写法：
        int arr5_1[][] = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
        int[] arr6_1[] = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
        int arr7_1[][] = {{1,2,3},{4,5},{6,7,8,9}}; //类型推断
        String arr8_1[][] = new String[3][4];

        //错误的写法
//		int[][] arr9 = new int[3][3]{{1,2,3},{4,5,6},{7,8,9}};
//		int[3][3] arr10 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
//		int[][] arr11 = new int[][10];


        //2. 数组元素的调用
        //针对于arr2来说，外层元素{1,2,3}、{4,5}、{6,7,8,9} 内层元素：1,2,3,4,5,6,7,8,9
        //调用内层元素
        System.out.println(arr2_1[0][0]);//1
        System.out.println(arr2_1[2][1]);//7

        //调用外层元素
        System.out.println(arr2_1[0]);//[I@776ec8df


        //测试arr3,arr4
        arr3_1[0][1] = "Tom";
        System.out.println(arr3_1[0][1]);
        System.out.println(arr3_1[0]);//[Ljava.lang.String;@4eec7777

        arr4_1[0] = new double[4];
        arr4_1[0][0] = 1.0;

        //3. 数组的长度
        System.out.println(arr2_1.length);//3
        System.out.println(arr2_1[0].length);//3
        System.out.println(arr2_1[1].length);//2
        System.out.println(arr2_1[2].length);//4

        //4. 如何遍历数组
        for (int i = 0; i < arr2_1.length; i++) {
            for(int j = 0;j < arr2_1[i].length;j++){
                System.out.print(arr2_1[i][j] + "\t");
            }
            System.out.println();
        }

        //5. 数组元素的默认初始化值
        //以动态初始化方式1说明：
        int[][] arr1 = new int[3][2];


        //外层元素默认值：
        System.out.println(arr1[0]);//[I@776ec8df
        System.out.println(arr1[1]);//[I@4eec7777
        //内层元素默认值：
        System.out.println(arr1[0][0]); //0

        boolean[][] arr2 = new boolean[3][4];
        //外层元素默认值：
        System.out.println(arr2[0]);//[Z@3b07d329
        //内层元素默认值：
        System.out.println(arr2[0][1]);//false

        String[][] arr3 = new String[4][2];
        //外层元素默认值：
        System.out.println(arr3[0]); //[Ljava.lang.String;@41629346
        //内层元素默认值：
        System.out.println(arr3[0][1]);//null

        //以动态初始化方式2说明：
        int[][] arr4 = new int[4][];
        //外层元素默认值：
        System.out.println(arr4[0]);//null
        arr4[0] = new int[]{1,2};
        System.out.println(arr4[0][0]);// 1
        //内层元素默认值：
//        System.out.println(arr4[0][1]);//报错

        //		String[][] arr5 = new String[5][];
//		//外层元素默认值：
//		System.out.println(arr5[0]);//null
//		//内层元素默认值：
//		System.out.println(arr5[0][0]);//报错

        //6. 数组的内存解析
    }
}
